home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / Libraries / VideoToolbox 96.06.15 / (Utilities) / TestLuminance / TestLuminance.c < prev    next >
C/C++ Source or Header  |  1995-08-14  |  6KB  |  237 lines

  1. /*
  2. TestLuminance.c
  3. a simple driver to test some of the functionality of Luminance.c
  4. HISTORY:
  5. 8/15/89 dgp wrote it.
  6. 10/12/90 dgp    updated it.
  7. 10/17/90 dgp    tidied up the timing print out.
  8. 8/24/91    dgp    Made compatible with THINK C 5.0.
  9. 8/27/92    dgp    replace SysEnvirons() by Gestalt()
  10. 12/21/92 dgp don't assume 8-bit dacs.
  11. */
  12. #include "VideoToolbox.h"
  13. #include "Luminance.h"
  14. //#include <Fonts.h>
  15. #if (THINK_C || THINK_CPLUS || SYMANTEC_C)
  16.     #include <profile.h>
  17. #endif
  18.  
  19. void TestLuminance(void);
  20.  
  21. void main(void)
  22. {
  23.     Require(gestalt8BitQD);
  24.     TestLuminance();
  25. }
  26.  
  27. void TestLuminance(void)
  28. {
  29.     register int i;
  30.     static LuminanceRecord LR;
  31.     register double L,V;
  32.     register double dL,dV;
  33.     unsigned long t,reps=100;
  34.     double tolerance;
  35.     double L0,L1;
  36.     int n;
  37.     double c,bits;
  38.     double e[512],mean,sd,max,LGot;
  39.  
  40.     /* Luminance.c includes a recursive routine that requires lots of stack space */
  41.     StackGrow(10000);        /* Increase stack */
  42.     assert(StackSpace()>10000);
  43.     MaxApplZone();            /* Expand heap to the limit. */
  44.  
  45.     MaximizeConsoleHeight();
  46.     #if (THINK_C || THINK_CPLUS || SYMANTEC_C)
  47.         InitProfile(200,2);
  48.     #endif
  49.     #if (THINK_C || THINK_CPLUS || SYMANTEC_C)
  50.         console_options.ncols=100;
  51.         printf("\n");
  52.     #elif __MWERKS__
  53.         SIOUXSettings.columns=100;
  54.     #else
  55.            /* INITIALIZE QuickDraw */
  56.         InitGraf(&qd.thePort);
  57.         InitFonts();
  58.         InitWindows();
  59.         InitCursor();
  60.     #endif
  61.     
  62.     #include "LuminanceRecord1.h"    
  63.     printf("Test SetRange and SetLuminance\n");
  64.     c=1.0;
  65.     L=(LR.LMin+LR.LMax)/2.0;
  66.     for(i=0;i<15;i++){
  67.         L0=L*(1.0-c);
  68.         L1=L*(1.0+c);
  69.         tolerance=SetLuminance(NULL,&LR,0,L,L0,L1);
  70.         printf("c%9.6f, ",c);
  71.         printf("Range%5.1f%5.1f, ",L0,L1);
  72.         printf("fixed %1d/%1d, ",LR.fixed,LR.dacs);
  73.         printf("L(VFixed)=%5.1f cd/m^2, ",VToL(&LR,LR.VFixed));
  74.         bits=log((LR.LMax-LR.LMin)/tolerance)/log(2.0);
  75.         printf("tolerance%6.3f=%4.1f bits\n",tolerance,bits);
  76.         c *= 0.5;
  77.     }
  78.  
  79.     printf("Test SetLuminancesAndRange & GetLuminance\n");
  80.     L0=LR.LMin;
  81.     L1=LR.LMax;
  82.     tolerance=SetLuminancesAndRange(NULL,&LR,0,LR.VMax,L0,L1,L0,L1);
  83.     printf("Range %5.1f %5.1f, ",L0,L1);
  84.     printf("fixed %1d/%1d, ",LR.fixed,LR.dacs);
  85.     printf("L(VFixed)=%5.1f cd/m^2, ",VToL(&LR,LR.VFixed));
  86.     bits=log((LR.LMax-LR.LMin)/tolerance)/log(2.0);
  87.     printf("tolerance %10.3f = %10.3f bits\n",tolerance,bits);
  88.     dL=(L1-L0)/LR.VMax;
  89.     printf("%10s %10s %10s\n","L requested","L received","Error");
  90.     n=LR.VMax+1;
  91.     if(n>sizeof(e)/sizeof(e[0]))n=sizeof(e)/sizeof(e[0]);
  92.     for(i=0,L=L0;i<n;i++,L+=dL){
  93.         LGot=GetLuminance(NULL,&LR,i);
  94.         e[i]=LGot-L;
  95.         if(i%16==0)printf("%10.3f %10.3f %10.3f\n",L,LGot,LGot-L);
  96.     }
  97.     mean=Mean(e,n,&sd);
  98.     max=0.0;
  99.     for(i=0;i<n;i++)if(fabs(max)<fabs(e[i]))max=e[i];
  100.     printf("Error mean %f sd %f max %f\n\n",mean,sd,max);
  101.     
  102.     printf("Test VToL and LToV\n");
  103.     printf("%10s %10s %10s\n","L requested","V received","L received");
  104.     for(L=-10.0;L<100.0;L+=20.0){
  105.         V=LToV(&LR,L);
  106.         printf("%9.0f %9.1f %12.6f\n",L,V,VToL(&LR,V));
  107.     }
  108.  
  109.     reps=1000;
  110.     t=TickCount();
  111.     V=LR.VMin;
  112.     dV=(LR.VMax-V)/reps/4;
  113.     for(i=reps/4;i>0;i--) {
  114.         V=VToL(&LR,V);
  115.         V=VToL(&LR,V);
  116.         V=VToL(&LR,V);
  117.         V=VToL(&LR,V);
  118.         V+=dV;
  119.     }
  120.     t=TickCount()-t;
  121.     printf("VToL takes %.1f µs\n",1e6*t/(60.15*reps));
  122.  
  123.     reps=1000;
  124.     t=TickCount();
  125.     L=LR.LMin;
  126.     dL=(LR.LMax-L)/reps/4;
  127.     for(i=reps/4;i>0;i--) {
  128.         V=LToV(&LR,L);
  129.         V=LToV(&LR,L);
  130.         V=LToV(&LR,L);
  131.         V=LToV(&LR,L);
  132.         L+=dL;
  133.     }
  134.     t=TickCount()-t;
  135.     printf("LToV takes %.1f µs\n",1e6*t/(60.15*reps));
  136.  
  137.     reps=1000;
  138.     L0=(LR.LMin+LR.LMax)/2.0;
  139.     L1=1.01*L0;
  140.     SetLuminance(NULL,&LR,0,50.,L0,L1);
  141.     L=L0;
  142.     dL=(L1-L)/reps/4;
  143.     t=TickCount();
  144.     for(i=reps/4;i>0;i--) {
  145.         SetLuminance(NULL,&LR,0,L,L0,L1);
  146.         SetLuminance(NULL,&LR,0,L,L0,L1);
  147.         SetLuminance(NULL,&LR,0,L,L0,L1);
  148.         SetLuminance(NULL,&LR,0,L,L0,L1);
  149.         L+=dL;
  150.     }
  151.     t=TickCount()-t;
  152.     printf("SetLuminance takes %.1f µs with small old range\n",1e6*t/(60.15*reps));
  153.  
  154.     reps=1000;
  155.     SetLuminance(NULL,&LR,0,50.,LR.LMin,LR.LMax);
  156.     L=LR.LMin;
  157.     dL=(LR.LMax-L)/reps/4;
  158.     t=TickCount();
  159.     for(i=reps/4;i>0;i--) {
  160.         SetLuminance(NULL,&LR,0,L,LR.LMin,LR.LMax);
  161.         SetLuminance(NULL,&LR,0,L,LR.LMin,LR.LMax);
  162.         SetLuminance(NULL,&LR,0,L,LR.LMin,LR.LMax);
  163.         SetLuminance(NULL,&LR,0,L,LR.LMin,LR.LMax);
  164.         L+=dL;
  165.     }
  166.     t=TickCount()-t;
  167.     printf("SetLuminance takes %.1f µs with large old range\n",1e6*t/(60.15*reps));
  168.  
  169.     reps=200;
  170.     SetLuminance(NULL,&LR,0,L,LR.LMin,LR.LMax);
  171.     L=LR.LMin;
  172.     dL=(LR.LMax-L)/reps/4;
  173.     t=TickCount();
  174.     for(i=reps/4;i>0;i--) {
  175.         SetLuminance(NULL,&LR,0,L,LR.LMin,LR.LMax-1.0);
  176.         SetLuminance(NULL,&LR,0,L,LR.LMin,LR.LMax);
  177.         SetLuminance(NULL,&LR,0,L,LR.LMin,LR.LMax-1.0);
  178.         SetLuminance(NULL,&LR,0,L,LR.LMin,LR.LMax);
  179.         L+=dL;
  180.     }
  181.     t=TickCount()-t;
  182.     printf("SetLuminance takes %.1f µs with large new range\n",1e6*t/(60.15*reps));
  183.  
  184.     reps=200;
  185.     SetLuminance(NULL,&LR,0,L0,L0,L1);
  186.     t=TickCount();
  187.     for(i=0;i<reps/4;i++) {
  188.         SetLuminancesAndRange(NULL,&LR,0,255,L0,L1,L0,L1);
  189.         SetLuminancesAndRange(NULL,&LR,0,255,L0,L1,L0,L1);
  190.         SetLuminancesAndRange(NULL,&LR,0,255,L0,L1,L0,L1);
  191.         SetLuminancesAndRange(NULL,&LR,0,255,L0,L1,L0,L1);
  192.     }
  193.     t=TickCount()-t;
  194.     printf("SetLuminancesAndRange(0..255) takes %.1f ms with small old range\n",1000.0*t/(60.15*reps));
  195.  
  196. #if 1
  197.     reps=48;
  198.     SetLuminance(NULL,&LR,0,L0,L0,L1);
  199.     t=TickCount();
  200.     for(i=0;i<reps/4;i++) {
  201.         SetLuminancesAndRange(NULL,&LR,0,255,L0,L1,L0,L1*1.001);
  202.         SetLuminancesAndRange(NULL,&LR,0,255,L0,L1,L0,L1);
  203.         SetLuminancesAndRange(NULL,&LR,0,255,L0,L1,L0,L1*1.001);
  204.         SetLuminancesAndRange(NULL,&LR,0,255,L0,L1,L0,L1);
  205.     }
  206.     t=TickCount()-t;
  207.     printf("SetLuminancesAndRange(0..255) takes %.1f ms with small new range\n",1000.0*t/(60.15*reps));
  208. #endif
  209.  
  210.     reps=48;
  211.     SetLuminance(NULL,&LR,0,50.,LR.LMin,LR.LMax);
  212.     t=TickCount();
  213.     for(i=0;i<reps/2;i++) {
  214.         SetLuminancesAndRange(NULL,&LR,0,255,LR.LMin,LR.LMax,LR.LMin,LR.LMax);
  215.         SetLuminancesAndRange(NULL,&LR,0,255,LR.LMin,LR.LMax,LR.LMin,LR.LMax);
  216.     }
  217.     t=TickCount()-t;
  218.     printf("SetLuminancesAndRange(0..255) takes %.1f ms with large old range\n",1000.0*t/(60.15*reps));
  219.  
  220. #if 1
  221.     reps=48;
  222.     SetLuminance(NULL,&LR,0,50.,LR.LMin,LR.LMax);
  223.     t=TickCount();
  224.     for(i=0;i<reps/2;i++) {
  225.         SetLuminancesAndRange(NULL,&LR,0,255,LR.LMin,LR.LMax-1.0,LR.LMin,LR.LMax-1.0);
  226.         SetLuminancesAndRange(NULL,&LR,0,255,LR.LMin,LR.LMax-1.0,LR.LMin,LR.LMax);
  227.     }
  228.     t=TickCount()-t;
  229.     printf("SetLuminancesAndRange(0..255) takes %.1f ms with large new range\n",1000.0*t/(60.15*reps));
  230. #endif
  231.     #if __MWERKS__
  232.         printf("Done. Hit Command-Q to quit.\n");
  233.     #endif
  234. }    
  235.  
  236.  
  237.